package blancosMikel.controller.servlets;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import blancosMikel.controller.beans.informativaBeans;
import blancosMikel.controller.beans.usuariosBeans;
import blancosMikel.model.dao.informativaDAO;
import blancosMikel.model.dao.rolesDAO;
import blancosMikel.model.dao.usuariosDAO;

/**
 * Servlet implementation class usuariosServlet
 */
@WebServlet(description = "control de usuarios", urlPatterns = { "/usuarios" })
public class usuariosSVR extends HttpServlet {

	private static final long serialVersionUID = 1L;
	private int id_buscado = 0;
	private int id = 0;
	private String mapping = null;

	// creando un bean especifico para la sesion
	usuariosBeans sesionBean = new usuariosBeans();
	
	// Creando Bean
	usuariosBeans usrBEAN = new usuariosBeans();
	informativaBeans info = new informativaBeans();

	// Creando Dao
	usuariosDAO usrDAO = new usuariosDAO();
	rolesDAO dao = new rolesDAO();
	informativaDAO iDAO = new informativaDAO();

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public usuariosSVR() {
		super();
		System.out.println("SVR.Usuarios----------> Ejecutandose!");
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		System.out.println("SVR.usuarios----------> doGet");
		response.sendRedirect("blancosMikel");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		System.out.println("SVR.usuarios----------> doPost");
		HttpSession sesion = request.getSession();

		int dispatch = Integer.parseInt(request.getParameter("dispatch"));
		System.out.println("SVR.usuarios.doPost----------> Cargando el disparador");

		if (request.getParameter("id") != null) {
			id_buscado = Integer.parseInt(request.getParameter("id"));
		}
		try {
			iDAO.selectInfo(info);
			switch (dispatch) {
			case 1: // Autenticar
				System.out.println("SVR.usuarios.doPost.Autentificar----------> Ejecutando Disparador");
				// cargando el bean para realizar la busqueda del usuario
				sesionBean.setUsuario(request.getParameter("usr"));
				// obteniendo la contraseña y validandola con la del usuario
				String passTecleado = request.getParameter("pass");
				// select a la tb.usuarios para ver si existe el usuario
				usrDAO.getUsuario(sesionBean);

				// si existe validar contraseñas
				if (sesionBean.validarPassword(passTecleado)) {
					// abriendo sesion
					sesion.setAttribute("sesion", sesionBean);
					// enviando respuesta requerida
					request.setAttribute("infoBean", info);
					mapping = "SEGURIDAD/intranet.jsp";
					System.out.println("SVR.usuarios.doPost.Autentificar----------> Bean cargado usuario aceptado!");
				} else {
					throw new Exception("password Incorrecto");
				}

				break;
			case 2:// Alta de usuario
				System.out.println("SVR.usuarios.doPost.AltaIntranet----------> Ejecutando Disparador");
				// LLENADO DEL BEAN
				usrBEAN.setId_usuario(usrDAO.nextId());
				usrBEAN.setNombre(request.getParameter("nombre").toUpperCase());
				usrBEAN.setPaterno(request.getParameter("ap_pat").toUpperCase());
				usrBEAN.setMaterno(request.getParameter("ap_mat").toUpperCase());
				usrBEAN.setEmail(request.getParameter("mail"));
				usrBEAN.setUsuario(request.getParameter("usuario"));
				usrBEAN.setSecreta(request.getParameter("pass"));
				usrBEAN.setRol(request.getParameter("roles"));

					if (usrDAO.validarUsuario(usrBEAN) == true) {
						request.setAttribute("infoBean", info);
						request.setAttribute("usrRoles",dao.getRol());
						request.setAttribute("mensaje","El usuario que elegiste ya exite prueba con otro");
						mapping = "SEGURIDAD/usrModulo/usrADD.jsp?id=1";
					} else {
						if(usrDAO.validarEmail(usrBEAN) == true){
							request.setAttribute("infoBean", info);
							request.setAttribute("usrRoles",dao.getRol());
							request.setAttribute("mensaje","El email que elegiste ya exite prueba con otro");
							mapping = "SEGURIDAD/usrModulo/usrADD.jsp?id=1";
						}else{
							usrDAO.insertUsuario(usrBEAN);
							request.setAttribute("infoBean",info);
							request.setAttribute("usrRoles",dao.getRol());
							request.setAttribute("mensaje","Usuario Agregado Exitosamente");
							mapping = "SEGURIDAD/usrModulo/usrADD.jsp?id=1";
						}
					}
				break;
			case 3:// Baja de usuario
				System.out.println("SVR.usuarios.doPost.Baja----------> Ejecutando Disparador");
				id = Integer.parseInt(request.getParameter("id"));
				if (sesion.getAttribute("sesion") == null) {
					throw new Exception("Sesion invalida vuelve a iniciar sesion");
				} else {
					usuariosBeans bajaBean = (usuariosBeans) sesion.getAttribute("sesion");
					if (bajaBean.getSecreta().equals(request.getParameter("secreta"))) {
						usrBEAN.setId_usuario(id);
						usrDAO.deleteUsuario(usrBEAN);
						request.setAttribute("infoBean", info);
						request.setAttribute("mensaje","¡Registro Borrado Correctamente!");
						request.setAttribute("catUsuario", usrDAO.getCatalogo());
						mapping = "SEGURIDAD/usrModulo/usuarios.jsp?id=1";
						System.out.println("SVR.usuarios.doPost.Baja----------> usuario eliminado!");
					} else {
						request.setAttribute("infoBean", info);
						request.setAttribute("catUsuario", usrDAO.getCatalogo());
						request.setAttribute("mensaje","¡Contraseña incorrecta eliminacion no realizada!");
						mapping = "SEGURIDAD/usrModulo/usuarios.jsp?id=1";
						System.out.println("SVR.usuarios.doPost.Baja----------> usuario no eliminado!");
					}
				}
				break;
			case 4:// Cambio en en registro
				System.out.println("SVR.usuarios.doPost.Actualizacion----------> Ejecutando Disparador");
				usrBEAN.setId_usuario(Integer.parseInt(request.getParameter("id_usuario")));
				usrBEAN.setNombre(request.getParameter("nombre").toUpperCase());
				usrBEAN.setPaterno(request.getParameter("ap_pat").toUpperCase());
				usrBEAN.setMaterno(request.getParameter("ap_mat").toUpperCase());
				usrBEAN.setEmail(request.getParameter("mail"));
				usrBEAN.setUsuario(request.getParameter("usuario"));
				usrBEAN.setSecreta(request.getParameter("pass"));
				usrBEAN.setRol(request.getParameter("roles"));
				if (sesion.getAttribute("sesion") == null) {
					throw new Exception("Sesion invalida vuelve a iniciar seion");
				} else {
					usuariosBeans updateBean = (usuariosBeans) request.getSession().getAttribute("sesion");
					if (updateBean.getSecreta().equals(request.getParameter("secreta"))) {
						usrDAO.updateUsuario(usrBEAN);
						request.setAttribute("infoBean", info);
						request.setAttribute("mensaje","Usuario Actualizado Exitosamente");
						request.setAttribute("catUsuario", usrDAO.getCatalogo());
						mapping = "SEGURIDAD/usrModulo/usuarios.jsp?id=1";
						System.out.println("SVR.usuarios.doPost.Baja----------> usuario actualizado!");
					} else {
						request.setAttribute("infoBean", info);
						request.setAttribute("catUsuario", usrDAO.getCatalogo());
						request.setAttribute("mensaje","¡Contraseña incorrecta modificacion no realizada!");
						mapping = "SEGURIDAD/usrModulo/usuarios.jsp?id=1";
						System.out.println("SVR.usuarios.doPost.Baja----------> usuario no actualizado!");
					}
				}
				break;
			case 5:// Registro de usuario no Intranet
				System.out.println("SVR.usuarios.doPost.AltaNoIntranet----------> Ejecutando Disparador");
				usrBEAN.setId_usuario(usrDAO.nextId());
				usrBEAN.setNombre(request.getParameter("nombre").toUpperCase());
				usrBEAN.setPaterno(request.getParameter("ap_pat").toUpperCase());
				usrBEAN.setMaterno(request.getParameter("ap_mat").toUpperCase());
				usrBEAN.setEmail(request.getParameter("mail"));
				usrBEAN.setUsuario(request.getParameter("usuario"));
				usrBEAN.setSecreta(request.getParameter("pass"));
				usrBEAN.setRol("Cliente Menudeo");

					usrBEAN.setEmail(request.getParameter("mail"));
					if (usrDAO.validarUsuario(usrBEAN) == true) {
						request.setAttribute("infoBean", info);
						request.setAttribute("mensaje","El usuario que elegiste ya exite prueba con otro");
						mapping = "SEGURIDAD/singIn.jsp";
						System.out.println("SVR.usuarios.doPost.AltaIntranet----------> usuario no Insertado!");
					} else {
						if(usrDAO.validarEmail(usrBEAN) == true){
							request.setAttribute("infoBean", info);
							request.setAttribute("mensaje","El email que elegiste ya exite prueba con otro");
							mapping = "SEGURIDAD/singIn.jsp";
							System.out.println("SVR.usuarios.doPost.AltaIntranet----------> usuario no Insertado!");
						}else{
							usrDAO.insertUsuario(usrBEAN);
							request.setAttribute("infoBean", info);
							request.setAttribute("mensaje","Usuario Agregado Exitosamente");
							mapping = "SEGURIDAD/singIn.jsp";
							System.out.println("SVR.usuarios.doPost.AltaNoIntranet----------> usuario Insertado!");
						}
					}
				break;
			case 6:// Muestreo de catalogo
				System.out.println("SVR.usuarios.doPost.Catalogo----------> Ejecutando Disparador");
				request.setAttribute("infoBean", info);
				request.setAttribute("mensaje", "Catalogo Cargado!");
				request.setAttribute("catUsuario", usrDAO.getCatalogo());
				mapping = "SEGURIDAD/usrModulo/usuarios.jsp?id=1";
				System.out.println("SVR.usuarios.doPost.Catalogo----------> Catalogo Cargado!");
				break;
			case 7:// Busqueda Delete
				System.out.println("SVR.usuarios.doPost.BusquedaDelete----------> Ejecutando Disparador");
				request.setAttribute("infoBean", info);
				if (id_buscado == 1) {
					request.setAttribute("mensaje", "Catalogo Cargado!");
					request.setAttribute("catUsuario", usrDAO.getCatalogo());
				} else {
					usrBEAN.setId_usuario(id_buscado);
					usrDAO.buscarUsuario(usrBEAN);
					request.setAttribute("usrBusqueda", usrBEAN);
				}
				mapping = "SEGURIDAD/usrModulo/usuarios.jsp?";
				System.out.println("SVR.usuarios.doPost.BusquedaDelete----------> Usuario Encontrado!");
				break;
			case 8:// Busqueda Update
				System.out.println("SVR.usuarios.doPost.BusquedaUpdate----------> Ejecutando Disparador");
				request.setAttribute("infoBean", info);
				usrBEAN.setId_usuario(id_buscado);
				usrDAO.buscarUsuario(usrBEAN);
				if (usrBEAN.getEmail().equals("-@-.com")) {
					usrBEAN.setEmail("");
				}
				request.setAttribute("usrBusqueda", usrBEAN);
				request.setAttribute("usrRoles", dao.getRol());
				mapping = "SEGURIDAD/usrModulo/usrADD.jsp";
				System.out.println("SVR.usuarios.doPost.BusquedaUpdate----------> Usuario Encontrado!");
				break;
			case 9:// Formulario Alta
				System.out.println("SVR.usuarios.doPost.FormularioAlta----------> Ejecutando Disparador");
				request.setAttribute("infoBean", info);
				request.setAttribute("usrRoles", dao.getRol());
				mapping = "SEGURIDAD/usrModulo/usrADD.jsp?id=1";
				System.out.println("SVR.usuarios.doPost.FormularioAlta----------> Usuario Encontrado!");
				break;
			case 10:// restablecer secreta
				System.out.println("SVR.usuarios.doPost.ResetPassword----------> Ejecutando Disparador");
				request.setAttribute("infoBean", info);
				mapping = "SEGURIDAD/restaurarPass.jsp";
				System.out.println("SVR.usuarios.doPost.ResetPassword----------> Mostrando Ventana de actualizacion!");
				break;
			case 11:// Actualizar New Secreta
				System.out.println("SVR.usuarios.doPost.updatePassword----------> Ejecutando Disparador");
				usrBEAN.setEmail(request.getParameter("bEmail"));
				System.out.println("SVR.usuarios.doPost.updatePassword----------> Obteniendo email");
				usrDAO.buscarEmail(usrBEAN);
				System.out.println("SVR.usuarios.doPost.updatePassword----------> email encontrado en BD");
				usrBEAN.resetSecreta();
				System.out.println("SVR.usuarios.doPost.updatePassword----------> restableciendo secreta");
				usrDAO.updateUsuario(usrBEAN);
				System.out.println("SVR.usuarios.doPost.updatePassword----------> actualizando secreta en BD");
				StringBuilder msj = new StringBuilder();
				msj.append("Contraseña Restaurada: ").append(usrBEAN.getSecreta());
				request.setAttribute("mensaje", msj.toString());
				request.setAttribute("infoBean", info);
				mapping = "SEGURIDAD/singIn.jsp";
				System.out.println("SVR.usuarios.doPost.updatePassword----------> Mostrando Ventana de actualizacion!");
				break;
			case 12:// Cambio en en registro
				System.out.println("SVR.usuarios.doPost.Actualizacion----------> Ejecutando Disparador");
				usrBEAN.setId_usuario(Integer.parseInt(request.getParameter("id_usuario")));
				usrBEAN.setNombre(request.getParameter("nombre").toUpperCase());
				usrBEAN.setPaterno(request.getParameter("ap_pat").toUpperCase());
				usrBEAN.setMaterno(request.getParameter("ap_mat").toUpperCase());
				usrBEAN.setEmail(request.getParameter("mail"));
				usrBEAN.setUsuario(request.getParameter("usuario"));
				usrBEAN.setSecreta(request.getParameter("pass"));
				usrBEAN.setRol(request.getParameter("roles"));
				if (sesion.getAttribute("sesion") == null) {
					throw new Exception("Sesion invalida vuelve a iniciar seion");
				} else {
					usuariosBeans updateBean = (usuariosBeans) request.getSession().getAttribute("sesion");
					if (updateBean.getSecreta().equals(request.getParameter("secreta"))) {
						usrDAO.updateUsuario(usrBEAN);
						sesionBean.setUsuario(usrBEAN.getUsuario());
						usrDAO.getUsuario(sesionBean);
						sesion.setAttribute("sesion", sesionBean);
						request.setAttribute("infoBean", info);
						request.setAttribute("mensaje","Usuario Actualizado Exitosamente");
						mapping = "SEGURIDAD/confModulo/cuenta.jsp";
						System.out.println("SVR.usuarios.doPost.Update----------> usuario actualizado!");
					} else {
						request.setAttribute("infoBean", info);
						request.setAttribute("mensaje","¡Contraseña incorrecta modificacion no realizada!");
						mapping = "SEGURIDAD/confModulo/cuenta.jsp";
						System.out.println("SVR.usuarios.doPost.Baja----------> usuario no actualizado!");
					}
				}
				break;
			}

		} catch (Exception error) {
			System.out.println("ChekSesion.doPost---->" + error.getMessage());
			request.setAttribute("infoBean", info);
			request.setAttribute("mensaje", error.getMessage());
			mapping = "SEGURIDAD/singIn.jsp";
		} finally {
			request.getRequestDispatcher(mapping).forward(request, response);
		}
	}
}
